/*
  flamingo - 2D Game Engine
  Copyright (C) 2009 Bradley Zeis

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.

  Bradley Zeis
  flamingoengine@gmail.com
*/

/* -------- UTILITY -------- */
MeshNode *uNewMeshNode(double x, double y);
VMeshNode *uNewVMeshNode(double x, double y);
int uBone_resize_children(Bone *bone, int allocate);
int uBone_add_child(Bone *parent, Bone *child);

/* -------- BONE METHODS -------- */
/* Initialization */
void Bone_dealloc(Bone *self);
PyObject *Bone_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
int Bone_init(Bone *self, PyObject *args, PyObject *kwds);
/* Presentation */
PyObject *Bone_repr(Bone *self);
PyObject *Bone_str(Bone *self);
/* Sequence Operations */
Py_ssize_t Bone_len(Bone *self);
PyObject *Bone_item(Bone *self, Py_ssize_t i);
/* General Function */
PyObject *Bone_children(Bone *self);
PyObject *Bone_add_child(Bone *self, PyObject *args);
/* Properties */
PyObject *Bone_getlength(Bone *self, void *closure);
int Bone_setlength(Bone *self, PyObject *value, void *closure);
PyObject *Bone_getangle(Bone *self, void *closure);
int Bone_setangle(Bone *self, PyObject *value, void *closure);

/* -------- MESH METHODS -------- */
/* Initialization */
void Mesh_dealloc(Mesh *self);
PyObject *Mesh_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
int Mesh_init(Mesh *self, PyObject *args, PyObject *kwds);
PyObject *Mesh_hash(Mesh *self);
/* Presentation */
PyObject *Mesh_repr(Mesh *self);
PyObject *Mesh_str(Mesh *self);
/* General Functions */
PyObject *Mesh_v(Mesh *self, PyObject *args);
PyObject *Mesh_t(Mesh *self, PyObject *args);

/* -------- MESHNODE METHODS -------- */
/* Initialization */
void MeshNode_dealloc(MeshNode *self);
PyObject *MeshNode_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
int MeshNode_init(MeshNode *self, PyObject *args);
int VMeshNode_init(VMeshNode *self, PyObject *args);
PyObject *MeshNode_hash(MeshNode *self);
/* Presentation */
PyObject *MeshNode_repr(MeshNode *self);
PyObject *MeshNode_str(MeshNode *self);
PyObject *VMeshNode_repr(VMeshNode *self);
PyObject *VMeshNode_str(VMeshNode *self);
/* General Functions */
PyObject *MeshNode_copy(MeshNode *self);
/* Properties */
PyObject *MeshNode_getx(MeshNode *self, void *closure);
int MeshNode_setx(MeshNode *self, PyObject *value, void *closure);
PyObject *MeshNode_gety(MeshNode *self, void *closure);
int MeshNode_sety(MeshNode *self, PyObject *value, void *closure);

PyMODINIT_FUNC initmesh(void);
